home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / OpenGL 1.0 SDK / Source / Examples / aux / samples / font.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  4.5 KB  |  246 lines  |  [TEXT/CWIE]

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "tk.h"
  5.  
  6.  
  7. #define OPENGL_WIDTH 24
  8. #define OPENGL_HEIGHT 13
  9.  
  10.  
  11. char string[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz";
  12. GLenum rgb, doubleBuffer, directRender, windType;
  13. GLuint strokeBase, outlineBase, filledBase, bitmapBase;
  14. float angleX = 0.0, angleY = 0.0, angleZ = 0.0;
  15. float scaleX = 1.0, scaleY = 1.0, scaleZ = 1.0;
  16. float shiftX = 0.0, shiftY = 0.0, shiftZ = 0.0;
  17.  
  18.  
  19. static void Init(void)
  20. {
  21.  
  22.     strokeBase = glGenLists(256);
  23.     if (tkCreateStrokeFont(strokeBase) == GL_FALSE) {
  24.     tkQuit();
  25.     }
  26.     outlineBase = glGenLists(256);
  27.     if (tkCreateOutlineFont(outlineBase) == GL_FALSE) {
  28.     tkQuit();
  29.     }
  30.     filledBase = glGenLists(256);
  31.     if (tkCreateFilledFont(filledBase) == GL_FALSE) {
  32.     tkQuit();
  33.     }
  34.     bitmapBase = glGenLists(256);
  35.     if (tkCreateBitmapFont(bitmapBase) == GL_FALSE) {
  36.     tkQuit();
  37.     }
  38.  
  39.     glClearColor(0.0, 0.0, 0.0, 0.0);
  40.     glClearIndex(0.0);
  41. }
  42.  
  43. static void Reshape(int width, int height)
  44. {
  45.  
  46.     glViewport(0, 0, (GLint)width, (GLint)height);
  47.  
  48.     glMatrixMode(GL_PROJECTION);
  49.     glLoadIdentity();
  50.     glOrtho(-400.0, 400.0, -200.0, 200.0, -400.0, 400.0);
  51.     glMatrixMode(GL_MODELVIEW);
  52. }
  53.  
  54. static GLenum Key(int key, GLenum mask)
  55. {
  56.  
  57.     switch (key) {
  58.       case TK_ESCAPE:
  59.         tkQuit();
  60.  
  61.       case TK_LEFT:
  62.     shiftX -= 20.0;
  63.     break;
  64.       case TK_RIGHT:
  65.     shiftX += 20.0;
  66.     break;
  67.       case TK_UP:
  68.     shiftY += 20.0;
  69.     break;
  70.       case TK_DOWN:
  71.     shiftY -= 20.0;
  72.     break;
  73.       case TK_n:
  74.     shiftZ += 20.0;
  75.     break;
  76.       case TK_m:
  77.     shiftZ -= 20.0;
  78.     break;
  79.  
  80.       case TK_q:
  81.     scaleX -= 0.1;
  82.     if (scaleX < 0.1) {
  83.         scaleX = 0.1;
  84.     }
  85.     break;
  86.       case TK_w:
  87.     scaleX += 0.1;
  88.     break;
  89.       case TK_a:
  90.     scaleY -= 0.1;
  91.     if (scaleY < 0.1) {
  92.         scaleY = 0.1;
  93.     }
  94.     break;
  95.       case TK_s:
  96.     scaleY += 0.1;
  97.     break;
  98.       case TK_z:
  99.     scaleZ -= 0.1;
  100.     if (scaleZ < 0.1) {
  101.         scaleZ = 0.1;
  102.     }
  103.     break;
  104.       case TK_x:
  105.     scaleZ += 0.1;
  106.     break;
  107.  
  108.       case TK_e:
  109.     angleX -= 5.0;
  110.     if (angleX < 0.0) {
  111.         angleX = 360.0 + angleX;
  112.     }
  113.     break;
  114.       case TK_r:
  115.     angleX += 5.0;
  116.     if (angleX > 360.0) {
  117.         angleX = angleX - 360.0;
  118.     }
  119.     break;
  120.       case TK_d:
  121.     angleY -= 5.0;
  122.     if (angleY < 0.0) {
  123.         angleY = 360.0 + angleY;
  124.     }
  125.     break;
  126.       case TK_f:
  127.     angleY += 5.0;
  128.     if (angleY > 360.0) {
  129.         angleY = angleY - 360.0;
  130.     }
  131.     break;
  132.       case TK_c:
  133.     angleZ -= 5.0;
  134.     if (angleZ < 0.0) {
  135.         angleZ = 360.0 + angleZ;
  136.     }
  137.     break;
  138.       case TK_v:
  139.     angleZ += 5.0;
  140.     if (angleZ > 360.0) {
  141.         angleZ = angleZ - 360.0;
  142.     }
  143.     break;
  144.  
  145.       default:
  146.     return GL_FALSE;
  147.     }
  148.     return GL_TRUE;
  149. }
  150.  
  151. static void Draw(void)
  152. {
  153.  
  154.     glClear(GL_COLOR_BUFFER_BIT);
  155.  
  156.     TK_SETCOLOR(windType, TK_WHITE);
  157.  
  158.     glPushMatrix();
  159.  
  160.     glTranslatef(shiftX, shiftY, shiftZ);
  161.     glRotatef(angleX, 1.0, 0.0, 0.0);
  162.     glRotatef(angleY, 0.0, 1.0, 0.0);
  163.     glRotatef(angleZ, 0.0, 0.0, 1.0);
  164.     glScalef(scaleX, scaleY, scaleZ);
  165.  
  166.     glPushMatrix();
  167.     glRasterPos2f(-390.5, 0.5);
  168.     tkDrawStr(bitmapBase, string);
  169.     glPopMatrix();
  170.  
  171.     glPushMatrix();
  172.     glTranslatef(-390.5, -30.5, 0.0);
  173.     tkDrawStr(strokeBase, string);
  174.     glPopMatrix();
  175.  
  176.     glPushMatrix();
  177.     glTranslatef(-390.5, -60.5, 0.0);
  178.     tkDrawStr(outlineBase, string);
  179.     glPopMatrix();
  180.  
  181.     glPushMatrix();
  182.     glTranslatef(-390.5, -90.5, 0.0);
  183.     tkDrawStr(filledBase, string);
  184.     glPopMatrix();
  185.  
  186.     glPopMatrix();
  187.  
  188.     glFlush();
  189. }
  190.  
  191. static GLenum Args(int argc, char **argv)
  192. {
  193.     GLint i;
  194.  
  195.     rgb = GL_TRUE;
  196.     doubleBuffer = GL_FALSE;
  197.     directRender = GL_TRUE;
  198.  
  199.     for (i = 1; i < argc; i++) {
  200.     if (strcmp(argv[i], "-ci") == 0) {
  201.         rgb = GL_FALSE;
  202.     } else if (strcmp(argv[i], "-rgb") == 0) {
  203.         rgb = GL_TRUE;
  204.     } else if (strcmp(argv[i], "-sb") == 0) {
  205.         doubleBuffer = GL_FALSE;
  206.     } else if (strcmp(argv[i], "-db") == 0) {
  207.         doubleBuffer = GL_TRUE;
  208.     } else if (strcmp(argv[i], "-dr") == 0) {
  209.         directRender = GL_TRUE;
  210.     } else if (strcmp(argv[i], "-ir") == 0) {
  211.         directRender = GL_FALSE;
  212.     } else {
  213.         printf("%s (Bad option).\n", argv[i]);
  214.         return GL_FALSE;
  215.     }
  216.     }
  217.     return GL_TRUE;
  218. }
  219.  
  220. void main(int argc, char **argv)
  221. {
  222.  
  223.     if (Args(argc, argv) == GL_FALSE) {
  224.     tkQuit();
  225.     }
  226.  
  227.     tkInitPosition(30, 60, 800, 400);
  228.  
  229.     windType = (rgb) ? TK_RGB : TK_INDEX;
  230.     windType |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
  231.     windType |= (directRender) ? TK_DIRECT : TK_INDIRECT;
  232.     tkInitDisplayMode(windType);
  233.  
  234.     if (tkInitWindow("Font Test") == GL_FALSE) {
  235.     tkQuit();
  236.     }
  237.  
  238.     Init();
  239.  
  240.     tkExposeFunc(Reshape);
  241.     tkReshapeFunc(Reshape);
  242.     tkKeyDownFunc(Key);
  243.     tkDisplayFunc(Draw);
  244.     tkExec();
  245. }
  246.